package main
import "fmt"

var i = 5
var str="ABC"

type Person struct{
  name string
  age int
}
type Any interface{}

func main(){
  var	val Any
  val	= 5
  fmt.Printf("val has the value: %v\n", val)
  val	= str
  fmt.Printf("val has the value: %v\n", val)
  pers1 := &Person{"Rob Pike", 55}
  val	= pers1
  fmt.Printf("val has the value: %v\n", val)

  switch t := val.(type){
  case int:
	fmt.Printf("Type int %T\n", t)
  case string:
	fmt.Printf("Type string %T\n", t)
  case bool:
	fmt.Printf("Type boolean %T\n", t)
  case *Person:
	fmt.Printf("Type pointer to Person %T\n", t)
  default:
	fmt.Printf("Unexpected type %T\n", t)
  }
}
